/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufms.facom.chatsocket.repositorio;

import br.ufms.facom.chatsocket.exception.ParametroInvalidoException;
import br.ufms.facom.chatsocket.domain.Usuario;
import br.ufms.facom.chatsocket.exception.UsuarioNaoEncontradoException;
import java.util.List;

/**
 *
 * @author jairorodrigues
 */
public class RepositorioDeUsuario {
    
    private List<Usuario> usuarios;

    public RepositorioDeUsuario(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }
    
    /**
     * @param usuario Usuário a ser cadastrado
     */
    public void cadastrar (Usuario usuario) {
        this.usuarios.add(usuario);
    }
    
    /**
     * @param usuario Usuário a ser removido
     * @throws UsuarioNaoEncontradoException Será lançada se tentar remover um usuário inexistente
     */
    public void remover (Usuario usuario) throws UsuarioNaoEncontradoException {
        
        if (!this.usuarios.remove(usuario))
            throw new UsuarioNaoEncontradoException("Não foi possivel remover! Usuário não encontrado!");
    }
    
    /**
     * @param nomeDeUsuario O nome de usuário à ser removido
     * @throws UsuarioNaoEncontradoException Será lançada se tentar remover um usuário inexistente
     * @throws ParametroInvalidoException Será lançado se o nomeDeUsuario for inválido
     */
    public void remover (String nomeDeUsuario) throws UsuarioNaoEncontradoException, ParametroInvalidoException
    {
        Usuario usuario = new Usuario();
        usuario.setNomeDeUsuario(nomeDeUsuario);
        
        remover(usuario);
    }
    
    /**
     * Busca e retorna um usuario cadastrado que tenha um determinado nomeDeUsuario e uma determinada senha.
     * Se não encontrar lançará uma exceção 
     * 
     * @param nomeDeUsuario
     * @param senha
     * @return Usuario O usuário encontrado
     * @throws UsuarioNaoEncontradoException 
     */
    public Usuario buscarPorNomeDeUsuarioESenha (String nomeDeUsuario, String senha) throws UsuarioNaoEncontradoException
    {
        for (Usuario usuario : usuarios)
            if (usuario.getNomeDeUsuario().equals(nomeDeUsuario) &&
                    usuario.getSenha().equals(senha))
                        return usuario;
        
        throw new UsuarioNaoEncontradoException();
        
    }
}

